c语言:进制和位运算

一.进制
十进制转n进制: 连除倒取余.

以 10 为例,不同进制的表示方法:

     十进制: 10;

     二进制: 0b1010;

     八进制: 010;

     十六进制: 0x10;

     

     

    

   int a = 100;

   printf("%o",a);

    /*

     如何输出进制数:

     %d ------ 十进制

     %o  ------ 八进制

     %0x ----- 十六进制

     */

    /*

     位运算符:按位与 &, 按位或 |, 按位非 ~, 按位异或 ^, 左移 <<, 右移 >>

     按位与 & : 同1 为 1,否则为 0,经常用于对某一位清零.

     按位或 | : 同0 为 0,否则为1.经常用于保留某一位,

     按位非 ~ : 如果是一个有符号的数,则最高位代表符号位,1 代表负数, 0 代表正数,

               数据在内存中存储时,是以补码的形式存储的,正数的补码是本身,负数的补码是 绝对值 取反 加 1 .

     按位异或 ^ : 相同为 0,不同为 1 ;

     */

    左移 << :

    unsigned char d = 1;

   printf("%d",d << 4);

    右移 >>

    unsigned char a = 255;

    printf("%d",a >> 1);

    unsigned char number = 0b01100100;

    unsigned char left = number << 4;

    unsigned char right = number >> 4;

    unsigned char result = left | right;

    printf("%d",result);

   /*

    //将 10010010 奇偶位互换

    unsigned char num = 0b10010010;

    //清零操作使用 按位&, 保留的位数为 1 ,清 0 数位为 0 ;

    //1.将奇数位变偶数位,左移一位

    unsigned char left = num << 1;

    //2.保留偶数位,奇数位清 0

    unsigned char clearJi = left & 10101010;

    //3.将偶数位变奇数位,右移一位

    unsigned char right = num >> 1;

    //4.保留奇数位偶数位清0

    unsigned char clearOu = right & 01010101;

    //5.最后按位或 |

    unsigned char result = clearJi | clearOu;

    printf("%d",result);

    

 */

    

    /*

     数据类型的取值范围: 

     无符号: char 类型  0 -- 255 (2 的8次方 - 1);

            short     0 -- 2的16次方 - 1;

            int       0 -- 2的32次方 - 1;

     有符号: char    -2 的 7次方 -- 2 的7次方 - 1;

            short   -2 的15次方 -- 2 的15次方 - 1;

            int     -2 的31次方 -- 2 的31次方 - 1;

     */

    char b = ~4;

    int a = 5 ^ 7;

    printf("%d",b);

    

  //栈区内存分配原则: 由高到低分配, 由低到高存取.

    int a = -5;

    printf("%p\n",&a);

    int b = 10;

    printf("%p\n",&b);

    

    //数组名代表数组的首地址,也就是数组的第一个元素地址,是一个常量地址

    int a[4] = {1, 2, 3, 4};

    printf("%d\n", &a[0]);

    printf("%p\n", &a[1]);

    printf("%p\n", &a[2]);

    printf("%p\n", &a[3]);

    printf("%p\n", &a);

    //交换两个数的值 不借助第三方变量

    int a = 20;//1001

    int b = 36;//0101

    printf("交换前 a = %d,b = %d\n",a, b);

    a = a ^ b;//1100

    b = b ^ a;//1001

    a = a ^ b;//0101

    printf("交换后 a = %d,b = %d\n",a, b);

 

posted @ 2015-07-23 19:19  C小鱼言  阅读(541)  评论(0编辑  收藏  举报